package com.fosu.common;

import lombok.Data;

import javax.servlet.http.HttpServletResponse;
import java.io.Serializable;

@Data
public class ResponseResult implements Serializable {


    private static final long serialVersionUID = 4633451373316892528L;


    // 响应消息
    public String info = "操作成功";

    // 响应数据
    public Object data = null;

    // 响应错误码,默认与Http响应码相同
    public Integer status;




    /**
     * <p>
     * Title: 响应失败
     * </p>
     *
     * @return ResponseResult
     */
    public static ResponseResult fail(HttpServletResponse resp) {

        resp.setStatus(500);
        return fail(resp,"操作失败");
    }

    /**
     * <p>
     * Title: 响应失败，但是自定义响应消息l
     * </p>
     *
     * @param info 需要自定义的响应消息
     * @return ResponseResult
     */
    public static ResponseResult fail(HttpServletResponse resp ,String info) {

        return build(resp, 500,500, info, null);
    }

    /**
     * <p>
     * Title: 成功并且传递数据，并且自定义响应消息内容
     * </p>
     *
     * @param info  响应消息内容
     * @param data 响应数据
     * @return ResponseResult
     */
    public static ResponseResult ok(HttpServletResponse resp,String info, Object data) {

        return build(resp, 200,200, info, data);
    }

    /**
     * <p>
     * Title: 成功并且传递数据，但是不自定义消息
     * </p>
     *
     * @param data 需要传递的数据
     * @return ResponseResult
     */
    public static ResponseResult ok(HttpServletResponse resp,Object data) {

        return ok(resp,"操作成功", data);
    }

    /**
     * <p>
     * Title: 成功，不传递信息，也不自定义信息
     * </p>
     *
     * @return ResponseResult
     */
    public static ResponseResult ok(HttpServletResponse resp) {

        return ok(resp,"操作成功", null);
    }

    /**
     * '
     *
     * <p>
     * Title: 成功，不传递数据，但是需要自定响应消息
     * </p>
     *
     * @param info 需要自定义的响应消息
     * @return ResponseResult
     */
    public static ResponseResult ok(HttpServletResponse resp,String info) {

        return ok(resp,info, null);
    }

    /**
     * <p>
     * Title: 自定义响应结构
     * </p>
     *
     * @param httpStatus 响应状态
     * @param status 自定义的响应状态
     * @param info    响应消息
     * @param data   响应数据
     * @return ResponseResult
     */
    public static ResponseResult build(HttpServletResponse resp, int httpStatus,int status, String info, Object data) {

        resp.setStatus(httpStatus);
        return new ResponseResult(status,info, data);
    }

    /**
     * <p>
     * Title: 自定义响应结构
     * </p>
     *
     * @param status 自定义的响应状态
     * @param info    响应消息
     * @param data   响应数据
     * @return ResponseResult
     */
    public static ResponseResult build(int status, String info, Object data) {

        return new ResponseResult(status,info, data);
    }

    public static ResponseResult bulid( String info, Object data) {

        return new ResponseResult(info, data);
    }


    public ResponseResult() {
        super();
    }


    /**
     * @param status 自定义的响应状态
     * @param info    响应消息
     * @param data   响应数据
     */
    public ResponseResult(int status,String info, Object data) {
        super();
        this.status = status;
        this.info = info;
        this.data = data;
    }
    public ResponseResult(String info, Object data) {
        super();

        this.info = info;
        this.data = data;
    }


    /**
     * @return the data
     */
    public Object getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(Object data) {
        this.data = data;
    }



}